<?php
namespace app\index\controller;

//导入用户定义的数据模型类
use \app\index\model\User;

//导入loader类
use \think\Loader;
class Hi 
{
	public function index()
	{
		//实例化数据模型
		$user = new \app\index\model\User;


		//获取对象一条数据
		dump($user::get(1)->toArray());
		
		$users = new \app\index\model\Users;

		dump($users::get(1)->toArray());

	}
	//模型实例化
	public function get()
	{
		//调用静态方法
		$res = User::get(1);
		dump($res->toArray());

		//实例化数据模型
		$user = new User();
		$res = $user::get(2);
		dump($res->toArray());

		//使用Loader
		$user = Loader::model("user");
		$res = $user::get(3);
		dump($res->toArray());

		//使用助手函数
		$user = model("user");
		$res = $user::get(4);
		dump($res->toArray());
	}

	//获取单条数据
	public function getOne()//获取的是一个对象结果集
	{
		//get方法
			//使用数字
			$res = User::get(1);//默认主键
			//使用数组
			$res = User::get(["name"=>'2']);//默认查找用户名
			//使用闭包函数查询
			$res = User::get(function($query){
				$query->where("id",15);
			});

		//find方法
			$res = User::where("id",10)->find();

		dump($res->toArray());		
	}

	//查询多条数据
	public function getAll()//获取的是一个对象集数组和
	{
		//all
			//所有数据
			$res = User::all();

			//字符串
			$res = User::all("1,2,3");//查询id为1，2，3的数据

			//数组
			$res = User::all(["age" => "16"]);

			//闭包
			$res = User::all(function($query){
				$query->where('age','18')
					->whereOr('age','16')
					->order("id","desc");
			});

		//select 和 all 基本类似
			$res = User::select();
			$res = User::select('1,2,3');
			$res = User::limit(2)->select();

			foreach ($res as $key => $value) {
				# 处理对象集数组的方式
				dump($value->toArray());
			}
	}

	//获取值
	public function getValue()
	{
		//获取某个值
		$res = User::where("id",5)->value("name");

		//获取某列值
		$res = User::column("name");

		dump($res);
	}

	//动态查询  优先读取id最小的一条记录 
	public function dong()
	{
		//getBy字段名
		$res = User::getByage('18');
		dump($res->toArray());
	}

	//增加数据    都为save方法 加入条件时为更新操作
	public function add()
	{
		
		$user = new User();
		//设置属性
		// $user->name = "yzmedu21";
		// $user->age = "18";
		// $user->rand = rand();

		//通过data方法
		// $user->data([
		// 	"name"=>"yzmedu22",
		// 	"age"=>"22",
		// 	"rand"=>rand(),
		// 	]);

		//实例化
		// $user = new User([
		// 	"name"=>"yzmedu25",
		// 	"age" =>"25",
		// 	"rand"=>rand(),
		// 	"sex" =>1
		// 	]);


		//返回影响行数  
		//dump($user->save());
		  
		//allowField数据库不存在的字段屏蔽掉
		//$user->allowField(true)->save();
		
		//指定插入数据库的字段
		// $user->allowField(['name','age'])->save();
		

		//增加多条数据
		// $list = [
		// 	['name'=>"yzmedu33","age"=>33],
		// 	['name'=>"yzmedu34","age"=>34]
		// ];
		// dump($user->saveAll($list,false));
		
		//create方法添加数据
	 	$user = User::create([
	 		"name"=>"yzmedu35",
	 		"age"=>35
	 		]);

	
	}

	//删除操作
	public function delete()
	{
		// $user = User::get(1);
		// 返回影响行数
		// dump($user->delete());

		//删除主键2
		$user = User::destroy(3);

		//删除主键3，4，5
		$user = User::destroy("3,4,5");
		//或者
		$user = User::destroy([1,2,3]);

		//删除name
		$user = User::destroy(['name'=>'yzmedu23']);
		
		//删除多个条件  删除一条记录  要在同一个条件内
		$user = User::destroy(['name'=>'yzmedu24','age'=>24]);

		//使用闭包  删除一个范围内的id
		$user = User::destroy(function($query){
			$query->where('id','<','8');
		});

		//删除数据
		$user = User::where("id",">","24")->delete();


		//获取最后执行的sql语句
		echo User::getLastSql();
		dump($user);
	}

	//更新数据
	public function update()
	{
		//设置字段更新数据
		// $user = User::get(15);
		// $user->age=20;
		// $res = $user->save();

		//直接数组修改
		$user = new User;
		$res = $user->save([
				'phone' => '15070942969',
				'age'   => 20,
				'name'  => '姓名'
			],['id'    => 8]);

		//修改数据
		$_POST['phone'] = 'yemedu55';
		$_POST['age'] = '55';
		$_POST['name'] = 'nan';
		$_POST['id'] = 8;
		$user = new User;
		//allowField中规定的字段才能写入
		$res = $user->allowField(['name','pass','age'])->save(
				$_POST,['Id'=>$_POST['id']]
			);

		//批量更新数据
		$data = [
			['Id'=>8,'name'=>'abc','age'=>456],
			['Id'=>9,'name'=>'abc','age'=>456],
		];
		$user = new User;
		$res = $user->saveAll($data);

		echo User::getLastSql();

		//更新操作 (范围)
		$user = new User;
		$res = $user->where('id','>','17')->update(['age'=>18]);
		$res = User::where('id','<','18')->update(['pass'=>'zxc']);

		//闭包更新
		$user = new User;
		$user->save(['name'=>'yzmedu21'],function($query){
			$query->where('id','15');
		});

		dump($res);
	}

	//数据统计
	public function tongji(){
		//统计数据条数
		$tot = User::count();

		dump($tot);

		//条件判断
		$tot = USer::where('age','>',18)->count();
		dump($tot);

		//统计最大值
		$max = User::max('age');

		dump($max);

		//统计最小值
		$min = User::min('age');

		dump($min);

		//平均值
		$avg = User::avg('age');
		dump($avg);

		// 求和
		$sum = User::sum('age');
		dump($sum);
	}

	//获取器 作用是在获取数据的字段值后自动进行处理，例如，我们需要对状态值进行转换
	public function getSex()
	{
		//获取ID为15的数据
		$user = User::get(18);

		//经过获取器的操作
		dump($user->toArray());

		dump($user->sex);

		//不经过获取器处理   $user->getData()
		dump($user->getData());
	}

	//修改器 必须使用save才能调用模型中的修改器 数据赋值的时候自动进行转换处理
	public function setPass()
	{
		//修改ID为15的密码
		$user = new USer();
		// $res = $user->where("id",15)->update(['pass'=>'456']);
		
		$res = $user->save(['pass'=>'456'],['id'=>15]);
		dump($res);
	}

	//自动完成 没有手动改赋值的情况下进行手动处理
	public function auto(){
	//修改器
		//数据赋值的时候自动进行转换处理
		//实例化User数据模型
		// $user = new User();

		// //插入数据
		// $res = $user->save(['name'=>'yunzhimeng','pass'=>'123']);

		// echo md5('123');

		// dump($res);
	

	//自动完成
		//没有手动赋值的情况下进行手动处理
		//实例化User数据模型
		$user = new User();

		//插入数据
		// $res = $user->save(['name'=>'yunzhimeng','pass'=>'123']);
		
		//修改数据
		$res = $user->save(['name'=>'yunzhimeng'],['Id'=>'33']);
	}

	//软删除  模型需要导入一个类traits\model\SoftDelete; 模型需要写入使用use SoftDelete;
	public function ruan()
	{
		//软数据
		// $res = User::destroy(33);
		//真删除
		// $res = User::destroy(33,true);
		// $user = new User();
		// $res = $user->where('id','8')->delete();//真删除

		//获取数据
		// $res = User::get(31);

		//读取全部数据 包含软删除数据
		// $res = User::withTrashed()->find(33);
		// $res = User::withTrashed()->select();
		// foreach ($res as $key => $value) {
		// 	# code...
		// 	$data[] = $value;
		// }
		// echo json_encode($data);
		

		//仅仅读取软删除数据
		$res = User::onlyTrashed()->select();
		// $res = User::onlyTrashed()->find(23);
		dump($res);
	}
}